                             - 51 -

                     2.   .

    1.    .

     IBM PC    8253 ( 8254)  
     .   -
        ,   -
       ,
            
   .    8253  
  ,     -
.
    8253      . 
       . 
 8253        -  
     ,      .
,      -
 1/12 .         
  -   .       
          
,     BIOS.   -
  .  2-1.      -
 .  18.2         0 
   ( ),   
           .
  0     12:00;     
  24 ,    . 
            
  18.2    .      -
   ,   .

                             - 52 -

      2.1.1    8253/8254.

          8253 (8254   AT)
   .       -
     ;    40H   42H
  0 -  2.       8- 
/,        -
.     ,     
 ,   .    
 16-   (latch register),   
       16-   -
.          ,
       .  
      ,      
        -
   ,      .  
    ,   .   -
  :       . -
          
  ,    .
           . 
  ,    . -
        IBM PC:

    0     .  -
 BIOS       ,   
  18.2   .  4-    -
       0040:006C (  -
 ).       (-
 8)          .
    ,      ,
  ,     ,    
  (.   [1.2.2]).   
      ,
     ,    -
      .

     1          
PCjr,      .     
        [5.4.2]    -
     DMA     .   PCjr
  1        
   . PCjr   -
      ,        
   ,     -
.   1      -
    ,          
     .

     2       
      . 
      ,     .
         -
 ,        

                             - 53 -

     .   2  
        -
. ,    2    -
.            
       -
 8255.
              ,
           ,
   (gate),      
 .         0 
1.         2,   -
    .   -
        61H,    -
  8255;      .
     [1.1.1].    -   
  2 -  1  61H        -
   .  .  2-2  
  8253.
           
 ,        .    
  1.19318      (   AT,  
   ,     
  1.19 ).    ,  
  16 ,   65535      
     ,  18.2,   -
      1/12 -
.          
  BIOS.      -
          
    ,     . -
 ,   [2.1.7],   -
       .
   8253    6  
   .      
,    0   ,      2
    .    ,  
   ,      
  .         -
       ..   
    ,      -
.       , 
     ,    .
   8-       
.        43H.   -
  ,      -
,   ,        -
    .          
  BCD ( ) . 
   :

                             - 54 -

      0     0,  ,  BCD
       3-1     , 1 - 5 (000 - 101)
       5-4     :
                00 =     
                01 = /   
                10 = /   
                11 = /  ,  
       7-6      , 0 - 2 (00 -10)

     ,    8253   -
    .        ,
      
 .

   1.         (43H)  , 
  ,     ,    /,
     .
   2.    2     ,   1
 0    61H. (  1   
 1,   2  .     0  -
 .)
   3.      0  65535,   
AX,      ,        
/  (40H - 42H).

     8253  .     -
      
8253  .  ,    -
   ,        ,
 MS DOS      . 
       Ctrl-Break [3.2.8].

    .

        0     ,
  BIOS    .      
  ,      
   ,   18.2    .  -
    , ,  1000   ,  
    .  
   1193 (1193180    / 10000).   
      .   [2.1.8]. 
        
,    0    
 .     - 65535 
     -    
0      (0        65535 
  .

                             - 55 -

;---  /
COMMAND_REG  EQU   43H         ;  
CHANNEL_0    EQU   40H         ;  0
             MOV   AL,00110110B   ;    2
             OUT   COMMAND_REG,AL ;   
;---   
             MOV   AX,1193     ;  100 /.
             OUT   CHANNEL_2,AL   ;  
             MOV   AL,AH       ;    
             OUT   CHANNEL_2,AL   ;  

                             - 56 -

   2.1.2 / .

      MS DOS       .
    4 ,   
  (  0040:006C,     ).   
    ,    
, ..         -
,   .      18.2
     .      
    ,          
         --.
       ,    -
  ,     .    
  -      
  .

    .

   TIME$        ::,
    0  23,   .  5:10 :

   100 TIME$ = "17:10:00"  ' 
   110 PRINT TIME$         ' 

    TIME$  ,     
       MID$,
LEFT$   RIGHT$.  ,    17:10:00  
5:10      ,   ,
      (  VAL), 
12,        :

100 T$ = TIME$                '  
110 HOUR$ = LEFT$(T$,2)       '  
120 MINUTES$ = MID$(T$,4,2)   '  
130 NEWHOUR = VAL(HOUR$)      '   
140 IF NEWHOUR > 12 THEN NEWHOUR = NEWHOUR - 12
150 NEWHOUR$ = STR$(NEWHOUR)  '   
160 NEWTIME$ = NEWHOUR$ + ":" + MINUTES$  '  

    .

   MS DOS        -
,      
   --.     -
   1/100 ,       -
       ,     -
  .  2CH  21H  ,
   2DH -  .     CH  
 ( 0  23,  0  ), CL -  ( 0
  59), DH -  ( 0  59)  DL -    ( 0
 99).

                             - 57 -

             2CH, AL 
    (0 = ).       
    . DOS    
 .   ,       2DH,
AL         (0 = -
, FF = ).

;--- 
   MOV   CH,HOURS       ;  
   MOV   CL,MINUTES     ;
   MOV   DH,SECONDS     ;
   MOV   DL,HUNDREDTHS  ;
   MOV   AH,2DH         ;   
   INT   21H            ; 
   CMP   AH,0FFH        ;  
   JE    ERROR          ;   

;--- 
   MOV   AH,2CH         ;   
   INT   21H            ; 
   MOV   DAY_OF_WEEK,AH ;    AH

    .

          1   8253
  ,       -
     .  BIOS -
        0  1.573   
          .
 ,       ,  
  24      .   
,   0040:0070        , 
   1 ( )   .

                             - 58 -

   2.1.3 / .

        MS DOS     
    .       BIOS.
          COMMAND.COM.   
   ,   -
  ,      ,   0,  0
  1980 .         ,
        DOS  
  COMMAND.COM.         
       MS DOS,   -
    .
   ,    -,  -
         
(         AUTOEXEC.BAT).   
    -,  . [2.1.4]. -
  ,      BIOS   
 24 , MS DOS  .

    .

     DATE$       
    --.       (/)
  (-).        . 
31-  1984 .:

   100 DATE$ = "10/31/84"     ' 
   110 PRINT DATE$            ' 

   ...     : 10-31-1984.

    .

     2AH    2BH  21H     
.       AH 2AH   -
.     CX         0  
119,       1980 - 2099 ( 
     1980 .).  DH   
,  DL - .

   MOV   AH,2AH       ;   
   INT   21H          ; 
   MOV   DAY,DL       ;  DL
   MOV   MONTH,DH     ;  DH
   ADD   CX,1980      ;   
   MOV   YEAR,CX      ;  

       ,       -
     2BH.   ,     
,   AL   FF,    - 0.

                             - 59 -

   MOV   DL,DAY       ;   DL
   MOV   DH,MONTH     ;   DH
   MOV   CX,YEAR      ;   CX
   SUB   CX,1980      ;   1980
   MOV   AH,2BH       ;   
   INT   21H          ; 
   CMP   AH,0FFH      ;  
   JE    ERROR        ; ,    

                             - 60 -

   2.1.4 /   .

         , -
         -
.      , 
   .        ,  
   .    -
  ,    -
    BIOS    DOS   ,    
       .  
         -
    .
           
  .      
IBM PC     ,  ,  ,  -
      .   AT  
    ,       MC146818
  Motorola,     ,   -
,        .    
  ,     -
   70H,        71H.
,   , :

                          

                00H                  
                01H                   
                02H                  
                03H                   
                04H                  
                05H                   
                06H                   
                07H                   
                08H                  
                09H                  
                0AH                    A
                0BH                    B
                0CH                    C
                0DH                    D

          ,
         -
:
    A:  7   1 =    ( 
                           0,  )
    B:  6   1 =   
               5   1 =   
               4   1 =    
               1   1 =    24, 0 =  12
               0   1 =    

                             - 61 -

        AT    -
 IRQ8.       
 ,      
[1.2.3].     4AH.      ,
    ,  ,     
[2.1.7] (      ).   
    ,     
.        
 .       -
.          -
      
.       
   .
    1AH   BIOS AT,    
    .     -
          ,  
    -    (BCD),
              
    .       
    ASCII.      
        48  -
  ASCII,     .   IBM PC
  0  1  1AH     -
  BIOS.         AT  
 :

    2:       
                : CH =   BCD
                             CL =   BCD
                             DH =   BCD
    3:      
                : CH =   BCD
                          CL =   BCD
                          DH =   BCD
                          DL = if daylight savings, else 1
    4:       
                : CH =   BCD (19  20)
                             CL =   BCD ( 1980)
                             DH =   BCD
                             DL =    BCD
    5:      
                :    CH =   BCD (19  20)
                             CL =   BCD ( 1980)
                             DH =   BCD
                             DL =    BCD
    6:       
                : CH =   BCD
                          CL =   BCD
                          DH =   BCD
    7:    (  )

    ,    -
 .    23:59:59.    -
 ,    4AH    
 .  ,       (
, -  ),    2, 4 
6   .

                             - 62 -

   2.1.5   .

          
,          , 
    .      -
 ,    ,   
        .   -
         -
  (,   ,  ,    
).    ,      -
    IBM PC -        -
          -
  .        -
     .      18.2  
,          ,
      ( -
   . [2.1.1]).
        , 
           
.          
.       
     .    ,  
        -
.    ,       
 ,    0040:006C ( ,  
 ).    14   -
   .      
  (,  - ,  ).

    .

         SOUND [2.2.2]  -
 ,  32767.       -
 .        -
  ,   .    5- 
 91  (5 * 18.2). 

100 SOUND 32767,91  '   5 

      :

100 DEF SEG = 0            '    
110 LOWBYTE = PEEK(&H46C)  '  
120 NEXTBYTE = PEEK(&H46D) '  
130 LOWCOUNT = NEXTBYTE*256 + LOWBYTE  '  

    .

           BIOS,  
 0  1AH           
  1/18 .      -
   ,     -
.      . 
1AH      DX (  -

                             - 63 -

    ),    , -
    CX,    ,        
32- .         5
,   91 .

;---     
            MOV   AH,0   ;   ""
            INT   1AH    ;  
            ADD   DX,91  ; 5 .   
            MOV   BX,DX  ;    BX
;---      BIOS
REPEAT:     INT   1AH    ;  
            CMP   DX,BX  ;  
            JNE   REPEAT ; ,   
                         ;,  

AT        15H,   
     .   86H  AH,  
    CX:DX.     -
.

                             - 64 -

   2.1.6    .

          -
    ,   :   
         -
.        --,
         ,
    .    
   BIOS,    1/18 , 
       ::.

100 GOSUB 500              '  
110 START = TOTAL          '    START
      .
 (  ,   )
      .
300 GOSUB 500              '  
310 TOTAL = TOTAL - START  '  
320 HOURS = FIX(TOTAL/65520)  '  
330 TOTAL = TOTAL - HOURS*65520  '   TOTAL
340 MINUTES = FIX(TOTAL/1092)    '  
350 TOTAL = TOTAL - MINUTES*1092 '   TOTAL
360 SECONDS = FIX(TOTAL/18.2)    '  
370 PRINT HOURS,MINUTES,SECONDS  ' 
380 END
      .
      .
500 DEF SEG = 0            '   
510 A = PEEK(&H46C)        '  
520 A = PEEK(&H46D)        '  
530 A = PEEK(&H46E)        '  
540 TOTAL = A + B*256 + C*65535  '   TOTAL
550 RETURN                 ' 

    TIMER       ,  
,        
 0.     ,       
  .          
  ,    TIMER    ,
  .   N = TIMER.

    .

     1AH        (AH =  1)  
 (AH = 0)     .    
     AH = 0.    
   CX:DX,     CX. AL -
 0,       24   
 .       
    ,   AH - 1.       
      .       
   .        ,
     ,    
,  .

                             - 65 -

;---  
OLDCOUNT  DW   0     ;   
;---   
          MOV  AH,0        ; 
          INT  1AH         ;  
          MOV  OLDCOUNT,DX ;  
           .
   (  ,   )
           .
;---   
          MOV  AH,0        ; 
          INT  1AH         ;  
          MOV  BX,OLDCOUNT ;  
          CMP  BX,DX       ;  
          JG   ADJUST      ; 
          SUB  DX,BX       ;  
          JMP  SHORT FIGURE_TIME  ;     
;--- 
ADJUST:   MOV  CX,0FFFFH   ;  CX  
          SUB  CX,BX       ;  
          ADD  CX,DX       ;  
          MOV  DX,CX       ;   DX
;---     
FIGURE_TIME:               ;  18.2   ..

                             - 66 -

   2.1.7     .

           -
      ,        .
          ,  
     .       
    .   ,     
     ,  -
 ,      
,     .    -
     ,   [2.1.5].
       .   ,  
  - ,     
       -
 .        , 
 18.2   .    ,
           
          ,  
 .      .  2-3. 
    ,      
,       -
  ,   .  (    
  [2.2.6]    ,       
  .)

    .

              
     ON TIMER(n) GOSUB.  
   ,      n
.      .   n
  ,     ,  -
     ,      -
     ,    .   
         
   n .
   ON  TIMER   ,       -
  TIMER ON.  TIMER OFF   -
.     ,     , 
       ,  
 TIMER STOP.    ,  n  -
,         ,
   TIMER ON.
      ,  ON TIMER   
     :

100 ON TIMER(60) GOSUB 500   '    60
110 TIMER ON                 '    
 .
 .
500 LOCATE 1,35:PRINT "TIME: ";LEFT$(TIME$,5)  '
510 RETURN                   '   

                             - 67 -

    .

   BIOS         (1CH), 
    ,       .   
             IRET
(   );      
.     1CH    ,    
   BIOS  ,    
   .   ,   -
  ,   18.2    .
      ,   
    .      
 18.2   .        
    .  [1.2.3].
           -
      ,    -
  ,      ,   
  .   ,      -
,      ,    -
.  ,     .
       (  ) -
     ( 60),    
,     .    ,  
MINUTES,     1092      
    .      
    16   -       
 32- .        
        -
  ALARMCOUNT.
      1CH   ,  
   ALARM. ,     
, ALARM     18.2   -
.            
    1AH    ALARMCOUNT. 
     BEEP (  -
  - .  [2.2.4]),     .  
     .       
  (MOV AH,20H / OUT 20H,AL)   -
    ,        .   
      .

;---  
   MINUTES     DW    0     ;    
   ALARMCOUNT  DW    0     ;    

;---     
   CALL  REQUEST_MINUTES   ;    
   MOV   AX,MINUTES        ;  AX
   MOV   BX,1092           ;    
   MUL   BX                ; -   AX
   ;   
   MOV   AH,0              ;   
   INT   1AH               ; ,    DX
   ;  
   ADD   AX,DX             ;
   MOV   ALARMCOUNT,AX     ;   

                             - 68 -

;---   
   PUSH  DS                ;  
   MOV   AX,SEG ALARM      ;   ALARM
   MOV   DS,AX             ;   DS
   MOV   DX,OFFSET ALARM   ;  
   MOV   AL,1CH            ;  
   MOV   AH,25H            ;  
   INT   21H               ; 
   POP   DS                ;  
;
;---  
;
;---     
   MOV   DX,0FF53H         ;  
   MOV   AX,0F000H         ; 1CH
   MOV   DS,AX             ;   DS
   MOV   AL,1CH            ;  
   MOV   AH,25H            ; 
   INT   21H               ; 

;---   
ALARM    PROC FAR          ;  
         PUSH AX           ;  
         PUSH CX           ;
         PUSH DX           ;
;---   
         MOV  AH,0         ;   
         INT  1AH          ;  
;---   
         MOV  CX,ALARMCOUNT   ;  
         CMP  DX,CX        ;  
         JNE  NOT_YET      ; ,   
;---  ,   
         CALL BEEP         ;   
;---   
NOT_YET: POP  DX           ; 
         POP  CX           ;
         POP  AX           ;
         IRET              ;  
ALARM    ENDP              ; 

                             - 69 -

   2.1.8       .

            
  .     -
      .    -
          
 .        ,
     .  ,
        
     ,       
     .

100 RANDOMIZE TIMER      '   
110 PRINT RND,RND,RND    '   

  :  .7122483  .4695052  .9132487

    .

             
       (       
0),           ,
    .  ,  -
        23.
       3  2 ( 42H) -
    [2.1.1].        
   (    10000,  -
        0  9999). ,
        ,    
       43H  
        "",    
   4  5.         
 .     4  5 
,       .  
   IN     ,    
   AL. ,   
 ,        
 .

;---  
COMMAND_REG  EQU   43H     ;  
CHANNEL_2    EQU   42H     ;  2
             CALL  SET_COUNT  ; 
              .
;---  ,     
              .
             CALL  GET_NUMBER ;  
              .
              .

                             - 70 -

;---   2
SET_COUNT    PROC
             MOV   AL,10110110B   ; 2,  2,  
             OUT   COMMAND_REG,AL ;   
             MOV   AX,10000       ; 
             OUT   CHANNEL_2,AL   ;  
             MOV   AL,AH          ;    AL
             OUT   CHANNEL_2,AL   ;  
             RET
SET_COUNT    ENDP
;---  
READ_NUMBER  PROC
;---     
             MOV   AL,10000110B   ; 
             OUT   COMMAND_REG,AL ;   
;---  
             MOV   AL,10110110B   ;  /
             OUT   COMMAND_REG,AL ; 
             IN    AL,CHANNEL_2   ;  
             MOV   AH,AL          ;    AH
             IN    AL,CHANNEL_2   ;  
             CALL  SET_COUNT      ; 
             SWAP  AH,AL          ;   
             RET                  ;    AX
READ_NUMBER  ENDP